package org.etnaframework.module.localcache;

import java.util.List;

/**
 * 增量更新任务 需要使用者实现的方法，包含全量更新的接口
 *
 * @author jasyaf
 * @since 2023-11-15
 */
public interface ILocalCacheCustomizerType3<T> {

    /**
     * 加载【全量】缓存数据的方法，如果返回null或抛异常，将被视作加载失败
     */
    T load() throws Throwable;

    /**
     * 加载【增量】缓存数据的方法，如果抛异常将视作加载失败
     *
     * @param cache 内存中已有的缓存对象
     * @param keys  有变化的key列表，在本方法的实现中，请根据这些key修改本地cache中的成员，达到增量更新的效果
     */
    void onIncrementalKeysReceived(T cache, List<String> keys) throws Throwable;

    /**
     * 异常处理器
     *
     * @param name 缓存名称
     * @param t    异常
     */
    void onError(String name, Throwable t);

    /**
     * 超时事件处理器
     *
     * @param name    缓存名称
     * @param startMs 任务开始时间（UNIX时间毫秒）
     */
    void onTimeout(String name, long startMs);
}
